#pragma
#include<iostream>
#include<pthread.h>

namespace MutexModule
{
    class Mutex
    {
        public:
            Mutex()//Mutex 类的构造函数，用于初始化互斥锁对象
            {
                pthread_mutex_init(&_mutex, nullptr);
            }
            void Lock()
            {
                int n = pthread_mutex_lock(&_mutex);//用于锁定互斥锁。它调用 pthread_mutex_lock 函数尝试获取互斥锁。
                //如果互斥锁已经被其他线程锁定，pthread_mutex_lock 将阻塞当前线程直到互斥锁被释放。该函数在成功时返回 0，如果发生错误，则返回相应的错误码
                (void)n;
            }
            void Unlock()
            {
                int n = pthread_mutex_unlock(&_mutex);//用于解锁互斥锁。它调用 pthread_mutex_unlock 函数来释放互斥锁。这允许其他等待该互斥锁的线程获取锁。
            }
            ~Mutex()
            {
                pthread_mutex_destroy(&_mutex);//用于销毁互斥锁对象
            }

        private:
            pthread_mutex_t _mutex;
    };

    class LockGuard//锁守卫，避免死锁，会全自动的开关锁
    {
        public:
            LockGuard(Mutex *mutex): _mutex(*mutex)
            {
                _mutex.Lock();
            }

            ~LockGuard()
            {
                _mutex.Unlock();
            }

        private:
            Mutex &_mutex;
    };


}